package com.simple;

import com.simple.annotation.impl.ActionImpl;
import com.simple.annotation.impl.ConfigImpl;
import com.simple.annotation.impl.InjectImpl;
import com.simple.annotation.impl.InstanceImpl;
import com.simple.tools.ReflectionsTool;
import lombok.extern.slf4j.Slf4j;

/**
 * 框架的初始类，使用此框架，必须要先调用此初始类完成必要的初始化任务
 */
@Slf4j
public class InfoExpress {
    public static void init(String... packageName) {
        log.info("启动通信组件");
        String name = InfoExpress.class.getPackage().getName(); // 获取框架的包名
        String[] pkNames = new String[packageName.length + 1];
        System.arraycopy(packageName, 0, pkNames, 0, packageName.length);
        pkNames[packageName.length] = name;
        ReflectionsTool.init(pkNames); // 初始化反射工具
        InstanceImpl.impl(); // 将指定的类进行托管，以单例模式，暂不支持非单例模式
        InjectImpl.init(); // 将InstanceManager中管理的类，执行相互注入操作。
        ConfigImpl.init(); // 对开发者的特殊配置，执行初始化操作
        InjectImpl.init(); // 二次注入，注入最新的实现类
        ActionImpl.init(); // 扫描InstanceManager的所有对象，将其中性方法被Action注解标记的方法，增强为Receiver对象，并且注册到注册中心中
    }
}